怎么用Java读取文件统计返回文件中包含的出现频率最高的3个Java关键字 |
您所在的位置:网站首页 › integer java关键字 › 怎么用Java读取文件统计返回文件中包含的出现频率最高的3个Java关键字 |
怎么用Java读取文件统计返回文件中包含的出现频率最高的3个Java关键字
发布时间:2021-07-09 09:15:07
来源:亿速云
阅读:129
作者:chen
栏目:编程语言
这篇文章主要介绍“怎么用Java读取文件统计返回文件中包含的出现频率最高的3个Java关键字”,在日常操作中,相信很多人在怎么用Java读取文件统计返回文件中包含的出现频率最高的3个Java关键字问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用Java读取文件统计返回文件中包含的出现频率最高的3个Java关键字”的疑惑有所帮助!接下来,请跟着小编一起来学习吧! 前言 昨天帮助还在读大学的朋友做一道Java题,记录下来。题目大致的意思是 统计返回文件中包含的出现频率最高的3个Java关键字 程序设计思路 读取文件肯定要用到 io 获取到文本的内容。 使用正则表达式读取到的文本是否是一个单词 判断得到的这个单词是否是java关键字 使用 TreeMap 暂存统计结果。key 是关键字 value 是出现的次数 对TreeMap的value进行降序排序,从而取出出现频率最高的java关键字。 代码 主要讲解都在注释中 package com.ioword; import com.alibaba.fastjson.JSON; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * 统计返回文件中包含的出现频率最高的3个Java关键字 * * @author lishuzhen * @date 2021/4/15 */ public class MyStatistic { /** * 定义正则表达式匹配单词 */ private static Pattern PATTERN = Pattern.compile("[a-zA-Z]+"); /** * Java常用关键字数组 */ private static String[] JAVA_KEYWORD_ARRAY = {"abstract", "assert", "boolean", "break", "byte", "case", "catch", "char", "class", "const", "continue", "default", "do", "double", "else", "extends", "false", "final", "finally", "float", "for", "goto", "if", "implements", "import", "instanceof", "int", "interface", "long", "native", "new", "null", "package", "private", "protected", "public", "return", "short", "static", "strictfp", "super", "switch", "synchronized", "this", "throw", "throws", "transient", "true", "try", "void", "volatile", "while"}; /** * 返回结果为文件中包含的出现频率最高的3个Java关键字 * * @param filePath * @return * @throws IOException */ public String[] topJavaWords(String filePath) throws IOException { // 读取文件 String str = readFileToString(filePath); // 使用正则表达式,判断是否是一个单词 Matcher matcher = PATTERN.matcher(str); // 统计关键字出现的次数 Map map = timesKeyWord(matcher); System.out.println("统计结果 ->" + map); // 对统计结果排序 List sortList = sort(map); return top(sortList, 3); } /** * 读取文件 * * @return */ public static String readFileToString(String filePath) { String str = null; try { BufferedReader reader = new BufferedReader(new FileReader(filePath)); StringBuffer buffer = new StringBuffer(); String line = null; while ((line = reader.readLine()) != null) { buffer.append(line); } reader.close(); // 整个文件的内容 转成 String 类型 str = buffer.toString(); } catch (IOException e) { e.printStackTrace(); } return str; } /** * 判断是否是Java关键字 * * @param keyword * @return */ public static boolean isJavaKeyWord(String keyword) { return (Arrays.binarySearch(JAVA_KEYWORD_ARRAY, keyword) >= 0); } /** * 统计关键字出现的次数 * * @param matcher * @return */ public static Map timesKeyWord(Matcher matcher) { // 用一个集合存放统计结果 key = 关键字 value = 出现的次数 Map map = new TreeMap(); String word = ""; // 出现次数 默认第一次 int times = 1; while (matcher.find()) { word = matcher.group(); System.out.println("拿到单词 -> " + word); // 判断是否使java关键字 if (isJavaKeyWord(word)) { System.out.println(word + " 是关键字"); // 如果包含该键,单词出现过 if (map.containsKey(word)) { // 得到单词出现的次数 times = map.get(word); // 出现的次数 + 1 map.put(word, times + 1); } else { // 否则单词第一次出现,添加到集合中,出现次数 = 1 map.put(word, times); } } } return map; } /** * 排序 * * @param map * @return */ public static List sort(Map map) { List list = new ArrayList(map.entrySet()); Collections.sort(list, new Comparator() { //降序排列 public int compare(Map.Entry o1, Map.Entry o2) { return o2.getValue().compareTo(o1.getValue()); } }); return list; } /** * 获取出现次数高的关键字数组 * * @param list * @param topNum * @return */ public static String[] top(List list, int topNum) { String[] result = new String[topNum]; for (int i = 0; i |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |